PROBLEMA: Sé que hay un límite en la cantidad de registros (2 ^ 32 - 1 por Mozilla ) que se pueden devolver desde IndexedDB , pero ¿qué pasa con los datos? Tengo un problema con IDBIndex.getAll() , o IDBObjectStore.getAll() para el caso, arrojando un error genérico cada vez que la cantidad de datos aparentemente excede un cierto tamaño.
"DOMException: The operation failed for reasons unrelated to the database itself and not covered by any other error code."Estoy usando Firefox, y esto ha sido un problema por un tiempo.
EJEMPLO:
... open the database, etc ... let index = db.transaction("database").objectStore("myStore").index("myIndex"); let range = IDBKeyRange.lowerBound(100000); // That's just a random number for the example let results = index.getAll(range); results.onerror = e => {...}; results.onsuccess = e => {...}; Eso siempre arrojará un error. Pero si cambio el rango a IDBKeyRange.lowerBound(100001) , siempre funciona.
PRUEBAS: si tuviera que convertir lowerBound en upperBound (y cambiar el rango), la cantidad de registros devueltos sin arrojar un error cambiaría, pero ese número sería consistente. Dado que no todos los registros tienen la misma cantidad de datos, y la cantidad de registros devueltos en cada caso es bastante cercana (19 844 frente a 20 188), eso parece respaldar mi afirmación. Lo mismo sucede si cambio el índice, solo un número diferente de registros.
Editar: probé la base de datos en otra máquina y obtuve un número máximo diferente de registros devueltos, pero ese número también fue consistente.
También intenté cerrar programas, pensando que tal vez era un problema de memoria, y cambiando el tamaño de mi base de datos agregando o eliminando una cantidad significativa de registros, pero eso no tuvo ningún efecto en los resultados devueltos.
Como solución, actualmente estoy usando openCursor() para evaluar cada registro individualmente, pero eso es más lento que usar getAll() ya que quiero todos los datos de cada registro que satisfagan la consulta.
¿Alguna idea de lo que está mal y cómo solucionarlo?
Ver problema relacionado que nunca se resolvió